<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			let arr = [10, 20, 30];
			console.log(arr);

			console.log(Symbol.iterator); //Symbol(Symbol.iterator)


			// 在数据的原型上有Symbol.iterator属性，对应的值是函数 ƒ values() { [native code] }
			console.log(arr[Symbol.iterator]);

			// 这个函数调用返回了一个对象  Array Iterator {}
			let iter = arr[Symbol.iterator]();
			console.log(iter);

			// 在这个对象上有next属性，对应的值是一个函数  
			console.log(iter.next); //ƒ next() { [native code] }

			// 调用next函数  返回了一个对象 {value:xx,done:false/true},value中保存的就是当前迭代数据的值，done属性对应的值是一个布尔值，false:继续迭代，true:停止迭代，这时候value就是undefined
			console.log(iter.next()); //{value: 10, done: false}
			console.log(iter.next()); //{value: 20, done: false}
			console.log(iter.next()); //{value: 30, done: false}
			console.log(iter.next()); //{value: undefined, done: true}
			
			
			
			let obj = {name:"哈哈",age:100};
			
			// Object数据不具备iterator接口
			// for(let val of obj){  // TypeError: obj is not iterable(迭代)
			// 	console.log(val); 
			// }
		</script>
	</body>
</html>
